<?php

// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: 麦当苗儿 <zuojiazi@vip.qq.com> <http://www.zjzit.cn>
// +----------------------------------------------------------------------

/**
 * 后台公共文件
 * 主要定义后台公共函数库
 */
/* 解析列表定义规则 */

function get_list_field($data, $grid, $model) {

    // 获取当前字段数据
    foreach ($grid['field'] as $field) {
        $array = explode('|', $field);
        $temp = $data[$array[0]];
        // 函数支持
        if (isset($array[1])) {
            $temp = call_user_func($array[1], $temp);
        }
        $data2[$array[0]] = $temp;
    }
    if (!empty($grid['format'])) {
        $value = preg_replace_callback('/\[([a-z_]+)\]/', function($match) use($data2) {
            return $data2[$match[1]];
        }, $grid['format']);
    } else {
        $value = implode(' ', $data2);
    }

    // 链接支持
    if (!empty($grid['href'])) {
        $links = explode(',', $grid['href']);
        foreach ($links as $link) {
            $array = explode('|', $link);
            $href = $array[0];
            if (preg_match('/^\[([a-z_]+)\]$/', $href, $matches)) {
                $val[] = $data2[$matches[1]];
            } else {
                $show = isset($array[1]) ? $array[1] : $value;
                // 替换系统特殊字符串
                $href = str_replace(
                        array('[DELETE]', '[EDIT]', '[MODEL]'), array('del?ids=[id]&model=[MODEL]', 'edit?id=[id]&model=[MODEL]', $model['id']), $href);

                // 替换数据变量
                $href = preg_replace_callback('/\[([a-z_]+)\]/', function($match) use($data) {
                    return $data[$match[1]];
                }, $href);

                $val[] = '<a href="' . U($href) . '">' . $show . '</a>';
            }
        }
        $value = implode(' ', $val);
    }
    return $value;
}

// 获取模型名称
function get_model_by_id($id) {
    return $model = M('Model')->getFieldById($id, 'title');
}

function get_real_name($id){
  return  M("buyers")->where(array("id"=>$id))->getField("realName");
}
// 获取属性类型信息
function get_attribute_type($type = '') {
    // TODO 可以加入系统配置
    static $_type = array(
        'num'       =>  array('数字','int(10) UNSIGNED NOT NULL'),
        'string'    =>  array('字符串','varchar(255) NOT NULL'),
        'textarea'  =>  array('文本框','text NOT NULL'),
        'datetime'  =>  array('时间','int(10) NOT NULL'),
        'bool'      =>  array('布尔','tinyint(2) NOT NULL'),
        'select'    =>  array('枚举','char(50) NOT NULL'),
    	'radio'		=>	array('单选','char(10) NOT NULL'),
    	'checkbox'	=>	array('多选','varchar(100) NOT NULL'),
    	'editor'    =>  array('编辑器','text NOT NULL'),
    	'picture'   =>  array('上传图片','int(10) UNSIGNED NOT NULL'),
    	'file'    	=>  array('上传附件','int(10) UNSIGNED NOT NULL'),
        'pictures'   =>  array('上传多图','varchar(255) NOT NULL'),
    );
    return $type ? $_type[$type][0] : $_type;
}

/**
 * 获取对应状态的文字信息
 * @param int $status
 * @return string 状态文字 ，false 未获取到
 * @author huajie <banhuajie@163.com>
 */
function get_status_title($status = null) {
    if (!isset($status)) {
        return false;
    }
    switch ($status) {
        case -1 : return '已删除';
            break;
        case 0 : return '禁用';
            break;
        case 1 : return '正常';
            break;
        case 2 : return '待审核';
            break;
        default : return false;
            break;
    }
}

// 获取数据的状态操作
function show_status_op($status) {
    switch ($status) {
        case 0 : return '启用';
            break;
        case 1 : return '禁用';
            break;
        case 2 : return '审核';
            break;
        default : return false;
            break;
    }
}

/**
 * 获取文档的类型文字
 * @param string $type
 * @return string 状态文字 ，false 未获取到
 * @author huajie <banhuajie@163.com>
 */
function get_document_type($type = null) {
    if (!isset($type)) {
        return false;
    }
    switch ($type) {
        case 1 : return '目录';
            break;
        case 2 : return '主题';
            break;
        case 3 : return '段落';
            break;
        default : return false;
            break;
    }
}

/**
 * 获取配置的类型
 * @param string $type 配置类型
 * @return string
 */
function get_config_type($type = 0) {
    $list = C('CONFIG_TYPE_LIST');
    return $list[$type];
}

/**
 * 获取配置的分组
 * @param string $group 配置分组
 * @return string
 */
function get_config_group($group = 0) {
    $list = C('CONFIG_GROUP_LIST');
    return $group ? $list[$group] : '';
}

/**
 * select返回的数组进行整数映射转换
 *
 * @param array $map  映射关系二维数组  array(
 *                                          '字段名1'=>array(映射关系数组),
 *                                          '字段名2'=>array(映射关系数组),
 *                                           ......
 *                                       )
 * @author 朱亚杰 <zhuyajie@topthink.net>
 * @return array
 *
 *  array(
 *      array('id'=>1,'title'=>'标题','status'=>'1','status_text'=>'正常')
 *      ....
 *  )
 *
 */
function int_to_string(&$data, $map = array('status' => array(1 => '正常', -1 => '删除', 0 => '禁用', 2 => '未审核', 3 => '草稿'))) {
    if ($data === false || $data === null) {
        return $data;
    }
    $data = (array) $data;
    foreach ($data as $key => $row) {
        foreach ($map as $col => $pair) {
            if (isset($row[$col]) && isset($pair[$row[$col]])) {
                $data[$key][$col . '_text'] = $pair[$row[$col]];
            }
        }
    }
    return $data;
}

/**
 * 动态扩展左侧菜单,base.html里用到
 * @author 朱亚杰 <zhuyajie@topthink.net>
 */
function extra_menu($extra_menu, &$base_menu) {
    foreach ($extra_menu as $key => $group) {
        if (isset($base_menu['child'][$key])) {
            $base_menu['child'][$key] = array_merge($base_menu['child'][$key], $group);
        } else {
            $base_menu['child'][$key] = $group;
        }
    }
}

/**
 * 获取参数的所有父级分类
 * @param int $cid 分类id
 * @return array 参数分类和父类的信息集合
 * @author huajie <banhuajie@163.com>
 */
function get_parent_category($cid) {
    if (empty($cid)) {
        return false;
    }
    $cates = M('Category')->where(array('status' => 1))->field('id,title,pid')->order('sort')->select();
    $child = get_category($cid); //获取参数分类的信息
    $pid = $child['pid'];
    $temp = array();
    $res[] = $child;
    while (true) {
        foreach ($cates as $key => $cate) {
            if ($cate['id'] == $pid) {
                $pid = $cate['pid'];
                array_unshift($res, $cate); //将父分类插入到数组第一个元素前
            }
        }
        if ($pid == 0) {
            break;
        }
    }
    return $res;
}

/**
 * 检测验证码
 * @param  integer $id 验证码ID
 * @return boolean     检测结果
 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
 */
function check_verify($code, $id = 1) {
    $verify = new \Think\Verify();
    return $verify->check($code, $id);
}

/**
 * 获取当前分类的文档类型
 * @param int $id
 * @return array 文档类型数组
 * @author huajie <banhuajie@163.com>
 */
function get_type_bycate($id = null) {
    if (empty($id)) {
        return false;
    }
    $type_list = C('DOCUMENT_MODEL_TYPE');
    $model_type = M('Category')->getFieldById($id, 'type');
    $model_type = explode(',', $model_type);
    foreach ($type_list as $key => $value) {
        if (!in_array($key, $model_type)) {
            unset($type_list[$key]);
        }
    }
    return $type_list;
}

/**
 * 获取当前文档的分类
 * @param int $id
 * @return array 文档类型数组
 * @author huajie <banhuajie@163.com>
 */
function get_cate($cate_id = null) {
    if (empty($cate_id)) {
        return false;
    }
    $cate = M('Category')->where('id=' . $cate_id)->getField('title');
    return $cate;
}

// 分析枚举类型配置值 格式 a:名称1,b:名称2
function parse_config_attr($string) {
    $array = preg_split('/[,;\r\n]+/', trim($string, ",;\r\n"));
    if (strpos($string, ':')) {
        $value = array();
        foreach ($array as $val) {
            list($k, $v) = explode(':', $val);
            $value[$k] = $v;
        }
    } else {
        $value = $array;
    }
    return $value;
}

// 获取子文档数目
function get_subdocument_count($id = 0) {
    return M('Document')->where('pid=' . $id)->count();
}

// 分析枚举类型字段值 格式 a:名称1,b:名称2
// 暂时和 parse_config_attr功能相同
// 但请不要互相使用，后期会调整
function parse_field_attr($string) {
    if (0 === strpos($string, ':')) {
        // 采用函数定义
        return eval(substr($string, 1) . ';');
    }
    $array = preg_split('/[,;\r\n]+/', trim($string, ",;\r\n"));
    if (strpos($string, ':')) {
        $value = array();
        foreach ($array as $val) {
            list($k, $v) = explode(':', $val);
            $value[$k] = $v;
        }
    } else {
        $value = $array;
    }
    return $value;
}

/**
 * 获取行为数据
 * @param string $id 行为id
 * @param string $field 需要获取的字段
 * @author huajie <banhuajie@163.com>
 */
function get_action($id = null, $field = null) {
    if (empty($id) && !is_numeric($id)) {
        return false;
    }
    $list = S('action_list');
    if (empty($list[$id])) {
        $map = array('status' => array('gt', -1), 'id' => $id);
        $list[$id] = M('Action')->where($map)->field(true)->find();
    }
    return empty($field) ? $list[$id] : $list[$id][$field];
}

/**
 * 根据条件字段获取数据
 * @param mixed $value 条件，可用常量或者数组
 * @param string $condition 条件字段
 * @param string $field 需要返回的字段，不传则返回整个数据
 * @author huajie <banhuajie@163.com>
 */
function get_document_field($value = null, $condition = 'id', $field = null) {
    if (empty($value)) {
        return false;
    }

    //拼接参数
    $map[$condition] = $value;
    $info = M('Model')->where($map);
    if (empty($field)) {
        $info = $info->field(true)->find();
    } else {
        $info = $info->getField($field);
    }
    return $info;
}

/**
 * 获取行为类型
 * @param intger $type 类型
 * @param bool $all 是否返回全部类型
 * @author huajie <banhuajie@163.com>
 */
function get_action_type($type, $all = false) {
    $list = array(
        1 => '系统',
        2 => '用户',
    );
    if ($all) {
        return $list;
    }
    return $list[$type];
}

/* * *
 * 订单状态数字转字符串
 * @author wangyuanlin 2015-05-19
 * -2：订单平台取消  -1：订单用户取消  1000：已创建、未付款  2000：已付款、未出单  3000：已出单、未打包  4000：已打包、未领取  5000：已领取、未分配  6000：已分配、未领件  7000：已领件、未派送  8000：已派送、未签收  9000：已签收、未评价  9999：已评价
 */
function int_to_string_order(&$data, $map = array('status' => array(-2 => '平台撤消',-1 => '用户撤消', 1000 => '待付款', 2000 => '待出单', 3000 => '待打包', 4000 => '待领取', 5000 => '待分配', 6000 => '待领件', 7000 => '待派送', 8000 => '待签收', 9000 => '待评价', 9999 => '已评价'))) {
    int_to_string($data, $map);
}
function sg_int_to_string_order(&$data, $map = array('status' => array(-2 => '平台撤消', 1000 => '已下单，未受理', 2000 => '已受理，未成功', 3000 => '交易成功', 4000 => '交易取消'))) {
    int_to_string($data, $map);
}
function sg_td_int_to_string_order(&$data, $map = array('status' => array(-2 => '平台撤消', 1000 => '已申请，未受理', 2000 => '已受理，未成功', 3000 => '退单成功', 4000 => '退单取消'))) {
    int_to_string($data, $map);
}
function sg_dg_int_to_string_order(&$data, $map = array('status' => array(-2 => '平台撤消', 1000 => '已申请，未受理', 2000 => '已受理，未成功', 3000 => '代购成功', 4000 => '代购取消'))) {
    int_to_string($data, $map);
}

/**
 * 获取商品图片
 */
function get_product_cover($cover_id, $field = null){
    if(empty($cover_id)){
        return false;
    }
    $picture = M('product_image')->where(array('status'=>1))->getById($cover_id);
    return empty($field) ? $picture : $picture[$field];
}

function Now() {
    return date("Y-m-d H:i:s");
}


/***
 * 获取品类名称
 * @author 曹梦龙 <138888611@qq.com>
 */
function get_classify_name($id){
    $Classify=M('classify')->where(array('id'=>$id))->find();
    return $Classify['title'];
}

/***
 * 获取区域名称
 * @author zhangwei
 */
function get_area_name($id){
    $area=M('area')->where(array('id'=>$id))->find();
    return $area['areaName'];
}

/***
 * 获取用户名称
 * @author zhangwei
 */
function get_user_name($id){
    $buyer_user=M('buyer_user')->where(array('id'=>$id))->find();
    return $buyer_user['nickName'];
}

/**
 * 获取订单对应状态的文字信息
 * @param int $status
 * @return string 状态文字 ，false 未获取到
 * @author James
 */
function get_order_status($status = null) {
    if (!isset($status)) {
        return false;
    }
    switch ($status) {
        case 1000 : return '未付款';
            break;
        case 2000 : return '未出单';
            break;
        case 3000 : return '未打包';
            break;
        case 4000 : return '未领取';
            break;
        case 5000 : return '未分配';
            break;
        case 6000 : return '未领件';
            break;
        case 7000 : return '未派送';
            break;
        case 8000 : return '未签收';
            break;
        case 9000 : return '未评价';
            break;
        case 9999 : return '已评价';
            break;
        case -1 : return '用户撤消';
            break;
        case -2 : return '平台撤消';
            break;
        default : return false;
            break;
    }
}

/**
 * 获取是、否
 * @param int $status
 * @return string 状态文字
 * @author James
 */
function get_bool($status = null) {
    switch ($status) {
        case 1 : return '是';
            break;
        default : return '否';
            break;
    }
}

/**
 * 获取同步状态
 * @param int $status
 * @return string 状态文字
 * @author James
 */
function sync_status($status = null) {
    switch ($status) {
        case 0 : return '已同步';
            break;
        case 1 : return '本地有新增';
            break;
        case 2 : return '本地有修改';
            break;
        case 3 : return '本地有删除';
            break;
    }
}

/**
 * 格式转换成百分比
 * @param int $d
 * @return int d*100
 * @author James
 */
function Percent($d = null) {
    if (!isset($d)) {
        return 0;
    }
    return $d*100;
}

/**
 * 获取图片数组URL
 * 转入图片ID 1，3，5
 */
function get_picarry_url($picarry){
    //$picidarry=split(',',$picarry);
    $map['id']  = array('in',$picarry);
    $imglist=M('product_image')->where($map)->Field('fileurl')->select();
    $arr = array();
    $img_count=count($imglist);
    $temp=$imglist[$img_count-1];
    $imglist[$img_count-1]=$imglist[0];
    $imglist[0]=$temp;
    for($i=0;$i<count($imglist);$i++){
        $arr[]=$imglist[$i]['fileurl'];
    }
    return json_encode($arr);
}


function get_poster_mold_name($mold){
     switch ($mold) {
        case 1 : return '微信商城';
            break;
        case 2 : return 'APP';
            break;        
    }
}


function get_app_poster_mold_name($mold){
     switch ($mold) {
        case 1 : return '首页轮播图';
            break;
        case 2 : return '首页今日特供轮播图';
            break;        
    }
}

//操作日志
function addOrderLog($id, $type, $remark, $uname) {
    if (is_null($uname)) {
        $uname = get_nickname(UID);
    }

    $Log = M("operate_log"); // 实例化User对象
    $data['dataId'] = $id;
    $data['type'] = $type;
    $data['uid'] = UID;
    $data['uname'] = $uname;
    $data['remark'] = $remark;
    $data['createdate'] = NOW_TIME;
    $data['createAt'] = NOW_TIME;
    $data['updateAt'] = NOW_TIME;
    $Log->add($data);
}